package com.example.toutiao.base

import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Toast

import androidx.appcompat.app.AppCompatActivity
import com.example.toutiao.R
import com.example.toutiao.mvp.presenter.BasePresenter
import com.example.toutiao.mvp.view.BaseView
import com.example.toutiao.ui.user.EvtMsgModel
import com.example.toutiao.utils.SharedPreferencesUtils
import com.example.toutiao.utils.StatusBarUtils
import me.bzcoder.mediapicker.SmartMediaPicker
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode

abstract class BaseActivity<V, P : BasePresenter<V>> : AppCompatActivity(), BaseView {
    private var mToast: Toast?=null
    private var mPresenter: P? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(getLayoutId())
        StatusBarUtils.setStatusBar(this, Constants.COMMON_BAR, R.color.white)
        /*如果视图不存在，则创建视图*/
        if (mPresenter == null) {
            mPresenter = createPresenter()
        }
        /*将视图传入适配器*/
        mPresenter!!.bindView(this as V)
        /*注册eventBus*/
        if(isRegister()){
            EventBus.getDefault().register(this)
        }
        initView()
        initData()
//        StatusBarUtils.setStatusBar(this, Constants.COMMON_BAR, R.color.white)

    }



    /**
     * 获取布局的id
     */
    protected abstract fun getLayoutId(): Int

    /**
     * 初始化 暂时不知道
     */
    protected abstract fun initView()

    /**
     * 初始化数据
     */
    protected abstract fun initData()

    /**
     * 为子类提供一个 抽象方法 创建适配器
     */
    protected abstract fun createPresenter(): P

    /**
     * 注册eventBus
     */
    protected abstract fun isRegister():Boolean

    /**
     * 子类通过这个方法获取父类的persenter 适配器
     */
    fun getPresenter() = mPresenter
    override fun onDestroy() {
        /*在适配器不为空的情况下解绑*/

        mPresenter!!.unBindView()
        /*解绑eventBus*/
        if(EventBus.getDefault().isRegistered(this)){
            EventBus.getDefault().unregister(this);
        }
        super.onDestroy()

    }
    /**
     * 弹框提示信息
     */
    fun showToast(msg: String) {
//        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        if(mToast==null){
            mToast=Toast.makeText(application,msg,Toast.LENGTH_SHORT)
        }
        mToast!!.show()
    }

    /**
     * 跳转页面
     * @param clz 所跳转的目的Activity类
     */
    fun startActivity(clz:Class<*>){
        startActivity(Intent(this,clz))
    }

    /*event bus 接受消息的两种方法 普通消息 黏性消息*/

    /**
     * 普通消息 实时
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    open fun getMessage(message: EvtMsgModel<*>){

    }

    /**
     * 黏性消息 存在延时
     */
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    open fun getMessageSticky(message: EvtMsgModel<*>){

    }

    /**
     * 发送消息
     */
    open fun postMsg(message: EvtMsgModel<*>){
        EventBus.getDefault().post(message)
    }
    fun getToken():String?= SharedPreferencesUtils.getSaveToken(this,Constants.TOKEN)




}